home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-01-02 | 73.5 KB | 2,103 lines |
- C.S.M.P. Digest Mon, 02 Jan 95 Volume 3 : Issue 77
-
- Today's Topics:
-
- AppleShare Volume or Local Volume?
- Default button in a modeless dialogue?
- How difficult to create an AS wrapper for porting?
- How to get Macintosh Name or Owner Name?
- How to receive events in AppleScript script?
- Jasik 12-08 Update available
- Mounting Appleshare Volumes
- PUZZLER: How to get to A5 world in _ExitToShell patch
- Password for mounting remote volumes
- SUMMARY: MacTCP Performance Problems
- [Q] How to find parameter info for traps
- string constants in Metrowerks C code resource?
-
-
-
- The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
- (pottier@clipper.ens.fr).
-
- The digest is a collection of article threads from the internet newsgroup
- comp.sys.mac.programmer. It is designed for people who read c.s.m.p. semi-
- regularly and want an archive of the discussions. If you don't know what a
- newsgroup is, you probably don't have access to it. Ask your systems
- administrator(s) for details. If you don't have access to news, you may
- still be able to post messages to the group by using a mail server like
- anon.penet.fi (mail help@anon.penet.fi for more information).
-
- Each issue of the digest contains one or more sets of articles (called
- threads), with each set corresponding to a 'discussion' of a particular
- subject. The articles are not edited; all articles included in this digest
- are in their original posted form (as received by our news server at
- nef.ens.fr). Article threads are not added to the digest until the last
- article added to the thread is at least two weeks old (this is to ensure that
- the thread is dead before adding it to the digest). Article threads that
- consist of only one message are generally not included in the digest.
-
- The digest is officially distributed by two means, by email and ftp.
-
- If you want to receive the digest by mail, send email to listserv@ens.fr
- with no subject and one of the following commands as body:
- help Sends you a summary of commands
- subscribe csmp-digest Your Name Adds you to the mailing list
- signoff csmp-digest Removes you from the list
- Once you have subscribed, you will automatically receive each new
- issue as it is created.
-
- The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
- Questions related to the ftp site should be directed to
- scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
- digest are available there.
-
- Also, the digests are available to WAIS users. To search back issues
- with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
- http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
-
-
- -------------------------------------------------------
-
- >From jms20@po.cwru.edu (John M. Sully)
- Subject: AppleShare Volume or Local Volume?
- Date: Thu, 01 Dec 1994 10:55:08 -0600
- Organization: Library Information Technologies - CWRU
-
- Greetings,
- I need to figure out the following about a mounted volume and am not
- sure what the "correct" way of doing it is...
-
- (1) Is the volume on an Appleshare server?
-
- an if so...
-
- (2) What is the name of the server it is on?
-
- Thanks,
- John
-
- --
- - -------------------------------------------------------------------------
- | John M. Sully | Freiberger Library | Yesterday's |
- | Software Maintenance and | Room 305 | Technology |
- | Development Specialist | voice:(216)368-8989| Solving Today's |
- | Library Infomation Technologies | fax:(216)368-8720 | Problems |
- | Case Western Reserve University | jms20@po.cwru.edu | Tomorrow |
- - -------------------------------------------------------------------------
- | <A HREF="http://x-wing.lit.cwru.edu/">John's Server </A> |
- - -------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From jumplong@aol.com (Jump Long)
- Date: 12 Dec 1994 01:50:27 -0500
- Organization: America Online, Inc. (1-800-827-6364)
-
- In article <jms20-0112941055080001@lit35332.lit.cwru.edu>,
- jms20@po.cwru.edu (John M. Sully) writes:
-
- >(1) Is the volume on an Appleshare server?
- >
- >an if so...
- >
- >(2) What is the name of the server it is on?
-
- If you just want to find out if the volume is a network volume, call
- PBHGetVolParms and look at the vMServerAdr volume returned in the
- GetVolParmsInfoBuffer structure. If vMServerAdr is non-zero, then the
- volume is a netowork volume.
-
- If you want to find out if a volume is mounted by the AppleShare foreign
- file system, then you should first call PBGetVolMountInfoSize. That will
- return the size of the volume mount information record that
- PBGetVolMountInfo will return. Allocate a block big enough for the volume
- mount information record and then call PBGetVolMountInfo to fill it in.
- If the media field in the volume mount information record is
- AppleShareMediaType, then the volume is an AppleShare volume and you can
- get the server name out of the volume mount information record.
-
- If you use the routines in Apple's sample code MoreFiles, this is made
- pretty easy. For example:
-
- OSErr result;
- short infoSize;
- short theFlags;
- short theUAMType;
- Str32 theZoneName, theServerName, theVolName, theUserName;
-
- result = GetVolMountInfoSize(NULL, vRefNum, &infoSize);
- if (result == noErr)
- {
- Ptr volMountInfo = NewPtr((Size)infoSize);
- if (volMountInfo != NULL)
- {
- result = GetVolMountInfo(NULL, vRefNum, volMountInfo);
- if (result == noErr)
- {
- result = RetrieveAFPVolMountInfo((AFPVolMountInfoPtr)volMountInfo,
- &theFlags,
- &theUAMType, theZoneName,
- theServerName,
- theVolName, theUserName);
- if (result == paramErr)
- {
- /* volume isn't an AFP volume (RetrieveAFPVolMountInfo returns
- paramErr in this case) */
- }
- }
- DisposePtr(volMountInfo);
- }
- }
- else
- {
- /* volume doesn't support volume mount calls so it isn't AppleShare
- volume */
- }
-
- (the code above was typed in here but not test compiled)
-
- Hope that helps...
-
- - Jim Luther
-
- ---------------------------
-
- >From ian@eruvia.demon.co.uk (Ian McCall)
- Subject: Default button in a modeless dialogue?
- Date: 16 Dec 1994 16:02:44 -0600
- Organization: UTexas Mail-to-News Gateway
-
- Hi.
-
- I'm trying to implement a modeless dialogue for the first time, and I've
- come across a problem.
-
- How do you implement default buttons in a modeless dialogue with editText
- fields? I've got the button there, and I've framed it using the dummy
- userItem method. However, I can't see how to make it understand that
- pressing return/enter is the same as clicking on the OK button.
-
- I'm calling IsDialogEvent, followed by DialogSelect in order to determine
- which dialogue the event is for. Thing is, DialogSelect 'helpfully'
- processes the event for me too. By the time I know both which key has been
- pressed and which dialogue it was pressed in, DialogSelect has already
- passed it on to the active TextEdit field.
-
- I've used return/enter here as examples, but it's also happening when I try
- to intercept escape for the 'cancel' button, and all the standard edit
- combos (z, x, c, v). As sson as I try to find out which dialogue the
- keypresses are in, the events get process anyway and I'm left with an
- unwanted character sitting in my editText field.
-
-
- Also, whilst I'm here, I'd like to ask for some help on pop-up menus under
- System 7. I haven't got all the documentation, but apparently there's a
- CDEF I can use in combination with PopUpMenuSelect(). Which CDEF is it,
- please? And how would I go about determining that information? This pop-up
- is to go in the same modeless dialogue as above, so I assume that what I
- need to do is get a handle to the CDEF and then do a SetDItem call - is
- that right?
-
- Thanks in advance for any information. As I say, I've not done a modeless
- dialogue box before and without having all the documentation to hand I'm
- finding it a bit awkward.
-
- Please reply via email, since I don't actually read this group very often.
- It's just too big to use with an online reader and your own phone bill
- ticking along in the background...
-
-
- Cheers,
- Ian
-
- (ian@eruvia.demon.co.uk)
-
-
-
- +++++++++++++++++++++++++++
-
- >From rmah@panix.com (Robert Mah)
- Date: Fri, 16 Dec 1994 21:43:32 -0500
- Organization: One Step Beyond
-
- ian@eruvia.demon.co.uk (Ian McCall) wrote:
-
- ) How do you implement default buttons in a modeless dialogue with editText
- ) fields? I've got the button there, and I've framed it using the dummy
- ) userItem method. However, I can't see how to make it understand that
- ) pressing return/enter is the same as clicking on the OK button.
- )
- ) I'm calling IsDialogEvent, followed by DialogSelect in order to determine
- ) which dialogue the event is for. Thing is, DialogSelect 'helpfully'
- ) processes the event for me too. By the time I know both which key has been
- ) pressed and which dialogue it was pressed in, DialogSelect has already
- ) passed it on to the active TextEdit field.
-
- One thing you can do is call the standard filter proc manually using the
- CallModalFilterProc macro returned from GetStdFilterProc. Come to think
- of it, calling the StdFilterProc() function may do the trick. Anyway,
- do this before calling DialogSelect() and call it only when it returns
- false (or is it true? Damn, I can never remember).
-
- Yes, I know these are usually used with modal dialogs, but they DO work
- with modeless dialogs as well. I use them in a SemiModalDialog() function
- I whipped up.
-
-
- ) and all the standard edit combos (z, x, c, v). As sson as I try to find
- ) out which dialogue the keypresses are in, the events get process anyway
- ) and I'm left with an unwanted character sitting in my editText field.
-
- You shouldn't pass keydown events with the cmdKey bit of the event.modifiers
- field set to DialogSelect. Trap these out and send them to your menu
- command function. Then, in your Edit menu handler, check to see if the
- front window is a dialog. If so, then call the appropriate DlgXXXX traps.
-
-
- ) Also, whilst I'm here, I'd like to ask for some help on pop-up menus under
- ) System 7. I haven't got all the documentation, but apparently there's a
- ) CDEF I can use in combination with PopUpMenuSelect(). Which CDEF is it,
- ) please? And how would I go about determining that information? This pop-up
- ) is to go in the same modeless dialogue as above, so I assume that what I
- ) need to do is get a handle to the CDEF and then do a SetDItem call - is
- ) that right?
-
- The procID is 1009. But there are a few variation codes and each field
- in the CNTL resource means something special. It's documented in Inside
- Mac VI as well as one of the new Inside Macs (but I can't remember which).
-
- Cheers,
- Rob
- _______________________________________________________________________
- Robert S. Mah Macintosh Software Development +1.212.947.6507
- One Step Beyond and Network Consulting rmah@panix.com
-
- ---------------------------
-
- >From osiris@cs.utexas.edu (Rob Browning)
- Subject: How difficult to create an AS wrapper for porting?
- Date: Sun, 11 Dec 1994 13:18:40 -0600
- Organization: The University of Texas at Austin
-
- There are a number of unix tools that would be useful to have on the Mac
- (indent comes to mind). I was wondering how difficult it would be to
- create a library representing a wrapper that could be used to encapsulate
- the unix code, turning it into an AppleScriptable application. It would
- be nice to be able to write scripts like this (please excuse my naive AS
- syntax):
-
- tell application "WordCount" --i.e. wc
- run given parameters:"-l" stdin:"MyDrive:inputFile"
- stdout:"MyDrive:outputFile"
- end tell
-
- or something like this.
-
- If this were done, porting some of the unix tools to the mac could be much
- more straightforward, and you could chain tools in a manner similar to the
- way tools are combined in MPW and unix. As it stands now, a number of
- these tools have been ported, but it is difficult to combine the
- standalone versions to do anything useful.
-
- Does anyone have an idea how difficult this would be?
-
- Thanks -- Rob
-
- +++++++++++++++++++++++++++
-
- >From julian@cs.auckland.ac.nz (Julian Harris)
- Date: Thu, 15 Dec 1994 18:21:54 +1300
- Organization: Computer Science Department, UA
-
- In article <osiris-1112941318400001@slip-14-1.ots.utexas.edu>,
- osiris@cs.utexas.edu (Rob Browning) wrote:
-
- > There are a number of unix tools that would be useful to have on the Mac
- > (indent comes to mind). I was wondering how difficult it would be to
- > create a library representing a wrapper that could be used to encapsulate
- > the unix code, turning it into an AppleScriptable application. It would
- > be nice to be able to write scripts like this (please excuse my naive AS
- > syntax):
- >
- > tell application "WordCount" --i.e. wc
- > run given parameters:"-l" stdin:"MyDrive:inputFile"
- > stdout:"MyDrive:outputFile"
- > end tell
- >
- > or something like this.
- >
- > Does anyone have an idea how difficult this would be?
-
- That could work. You'd 'subclass' the 'oapp' event so that its default
- behaviour would be the same (no arguments), but if you give it others,i.e.
- stdin and stdout parameters, it would accept them too. It could also do
- something tricky with odoc events too, so you can drag a file onto the app
- (which would then be the stdin source).
-
- Because AppleEvents are sent through events, you'd have two basic states
- of the program:
-
- - the wrapper which hangs around for the oapp and odoc events (if there are any)
- and if none, brings up the standard ccommand thing that is supplied with
- Symantec and MW.
-
- - the core app.
-
- Actually it would be better to have the stdin, stdout, parameters, etc
- sent in another event so you can do it again when the app is running.
-
- But one of the biggest problems with getting unix programs to work is that
- they rely on static initialisation of variables. That you have to do
- manually, but I agree, it wouldn't be too difficult to do such a thing.
- . . . . . . . . . . . . . . . . . . . . . . . . . . .
- Microsoft is not the answer. > Julian Harris, Programmer >
- Microsoft is the question. > Comp. Sci. Dept. x8915 >
- > The University of Auckland >
- NO is the answer. > julian@cs.auckland.ac.nz >
-
- +++++++++++++++++++++++++++
-
- >From gilbert@marin.cc.ca.us (Tim Gilbert)
- Date: Thu, 15 Dec 1994 20:12:31 GMT
- Organization: College of Marin, Kentfield, CA 94904
-
- Rob Browning (osiris@cs.utexas.edu) wrote:
- : There are a number of unix tools that would be useful to have on the Mac
- : (indent comes to mind). I was wondering how difficult it would be to
- : create a library representing a wrapper that could be used to encapsulate
- : the unix code, turning it into an AppleScriptable application. It would
- : be nice to be able to write scripts like this (please excuse my naive AS
- : syntax):
-
- : tell application "WordCount" --i.e. wc
- : run given parameters:"-l" stdin:"MyDrive:inputFile"
- : stdout:"MyDrive:outputFile"
- : end tell
-
- : or something like this.
-
- This is something that's been kicking around my head for a long time; I
- think it's a great idea. Unfortunately I've never had the System 7 savvy
- to work on it. But here are a few of the ideas I've had:
-
- -- All the simple TextEdit editors in all of those unix ports would be
- unnecessary; stdin could read either from a window or a file (the ProIcon
- environment handles this very nicely).
-
- -- Code size could be drastically reduced; most of the file, console, etc
- stuff in the <ANSI> lib could be replaced by simple AppleEvent calls.
- Further, all apps would use the same (single) stio library, which
- would be essentailly a shared library.
-
- -- My ambition was to write a full ANSI lib that would be in the public
- domain, with strcpy, malloc, fprintf, etc, etc... Unfortunately I
- don't have the time for any of that now. But the advantages of
- bundling all those up into a shared library should be clear, I
- think.
-
- Somewhere (perhaps the nic.switch.ch source archive?) is a package called
- posixlib... I haven't looked at it yet, but maybe it would provide some
- good code to use as a base to start from...
-
- Anyways, keep us all posted about what you come up with, if anything,
- please... Good luck! -- Tim
-
- --
- Tim Gilbert <> gilbert@marin.cc.ca.us <> College of Marin, S.F. Bay Area
-
- +++++++++++++++++++++++++++
-
- >From osiris@cs.utexas.edu (Rob Browning)
- Date: Fri, 16 Dec 1994 18:57:04 -0600
- Organization: The University of Texas at Austin
-
- In article <D0vC4v.EK5@marin.cc.ca.us>, gilbert@marin.cc.ca.us (Tim
- Gilbert) wrote:
-
- > This is something that's been kicking around my head for a long time; I
- > think it's a great idea. Unfortunately I've never had the System 7 savvy
- > to work on it. But here are a few of the ideas I've had:
- >
- > -- All the simple TextEdit editors in all of those unix ports would be
- > unnecessary; stdin could read either from a window or a file (the ProIcon
- > environment handles this very nicely).
-
- Quite true. It would really be nice if the wrapper could be constructed so that
- these tools could have their stdin and stdout redirected to your favorite
- text editor
- (Alpha for me :>), and then you could use the editor's text windows as shell
- windows to run the tools. One of the nice things about this is that the tools
- would only be taking up RAM when they are running (instead of the way that
- MPW handles tools). There could also be a flag that determines whether or not
- the tool quits after a run or stays open waiting for the next command.
-
- I've started looking into what it takes to create an applescriptable app,
- (in IM: Interapplication Communications), and it looks like I'm certainly not
- yet up to the task. Hopefully I'll get some time, and can learn the stuff
- I need to
- know, but it looks like a substantial undertaking...
-
- If anyone else gets the urge and knows this stuff better, feel free to go
- ahead :>
-
- --Rob.
-
- +++++++++++++++++++++++++++
-
- >From jacobowi@crab.rutgers.edu (Howard Jacobowitz)
- Date: 17 Dec 1994 21:41:13 -0500
- Organization: Rutgers University
-
- osiris@cs.utexas.edu (Rob Browning) writes:
-
- >There are a number of unix tools that would be useful to have on the Mac
- >(indent comes to mind). I was wondering how difficult it would be to
- >create a library representing a wrapper that could be used to encapsulate
- >the unix code, turning it into an AppleScriptable application. It would
- >be nice to be able to write scripts like this (please excuse my naive AS
- >syntax):
-
- >tell application "WordCount" --i.e. wc
- > run given parameters:"-l" stdin:"MyDrive:inputFile"
- >stdout:"MyDrive:outputFile"
- >end tell
-
- >or something like this.
- >If this were done, porting some of the unix tools to the mac could be much
- >more straightforward, and you could chain tools in a manner similar to the
- >way tools are combined in MPW and unix. As it stands now, a number of
- >these tools have been ported, but it is difficult to combine the
- >standalone versions to do anything useful.
-
- >Does anyone have an idea how difficult this would be?
-
- >Thanks -- Rob
-
- I shouldn't think it would be too hard. Actually, it would probably
- be kind of interesting to work out. I started something similar to
- this once, but never really spent enough time on it to get it to work
- decently.
-
- +++++++++++++++++++++++++++
-
- >From julian@cs.auckland.ac.nz (Julian Harris)
- Date: Mon, 19 Dec 1994 14:11:18 +1300
- Organization: Computer Science Department, UA
-
- In article <osiris-1612941857040001@slip-25-2.ots.utexas.edu>,
- osiris@cs.utexas.edu (Rob Browning) wrote:
-
- > In article <D0vC4v.EK5@marin.cc.ca.us>, gilbert@marin.cc.ca.us (Tim
- > Gilbert) wrote:
- >
- > > This is something that's been kicking around my head for a long time; I
- > > think it's a great idea. Unfortunately I've never had the System 7 savvy
- > > to work on it. But here are a few of the ideas I've had:
- > >
- > > -- All the simple TextEdit editors in all of those unix ports would be
- > > unnecessary; stdin could read either from a window or a file (the
- ProIcon
- > > environment handles this very nicely).
- >
- > Quite true. It would really be nice if the wrapper could be constructed
- so that
- > these tools could have their stdin and stdout redirected to your favorite
- > text editor
-
- <snip>
-
- >
- > If anyone else gets the urge and knows this stuff better, feel free to go
- > ahead :>
-
- Well, it does sound like with Apple events, and the proliferation of
- scriptable apps, that it could work reasonably well. One day, in a distant
- land, perhaps I could get around to it.
-
- I'm just researching IAC myself, and have printed out the relevant
- sections on Apple events, object descriptors, and recording (all 500 pages
- of it :) and have got lots of neat ideas about how to write a scriptable
- app. The first (which is extrememly revolutionary :) is to model your
- application in terms of what apple event objects it is comprised of, and
- their properties and elements they're associated with.
-
- Perhaps when I have a bit more experience with Apple events I could get on
- to this. It doesn't sound too hard I reckon.
- . . . . . . . . . . . . . . . . . . . . . . . . . . .
- Microsoft is not the answer. > Julian Harris, Programmer >
- Microsoft is the question. > Comp. Sci. Dept. x8915 >
- > The University of Auckland >
- NO is the answer. > julian@cs.auckland.ac.nz >
-
- ---------------------------
-
- >From tonyc@iconz.co.nz (Tony Cooper)
- Subject: How to get Macintosh Name or Owner Name?
- Date: 16 Dec 1994 06:20:03 GMT
- Organization: Public Access Internet, Auckland New Zealand
-
- How do you get the Macintosh Name or Owner Name? I have all the Inside Mac
- bookks, all the snippets, and all the Develop Bookmark CDs. But I can't
- find this one anywhere.
-
- Someone, please put me out of my misery and give me a reference. Mail
- to tonyc@iconz.co.nz.
-
- Shouldn't Gestalt do this?
-
- Thanks
- Tony Cooper
- tonyc@iconz.co.nz
-
-
- +++++++++++++++++++++++++++
-
- >From Jaeger@fquest.com (Brian Stern)
- Date: 17 Dec 1994 04:21:18 GMT
- Organization: The University of Texas at Austin, Austin, Texas
-
- In article <3crbil$54s@status>, tonyc@iconz.co.nz (Tony Cooper) wrote:
-
- < How do you get the Macintosh Name or Owner Name? I have all the Inside Mac
- < bookks, all the snippets, and all the Develop Bookmark CDs. But I can't
- < find this one anywhere.
- <
- < Someone, please put me out of my misery and give me a reference. Mail
- < to tonyc@iconz.co.nz.
- <
- < Shouldn't Gestalt do this?
- <
- < Thanks
- < Tony Cooper
- < tonyc@iconz.co.nz
-
- You can call GetString() with these constants:
-
- const short kChooserNameID = -16096;
- const short kMachineNameID = -16413;
-
- These 'STR ' resources are in the system file.
-
- --
- Brian Stern :-{)}
- Toolbox commando and Menu bard
- Jaeger@fquest.com
-
- +++++++++++++++++++++++++++
-
- >From jwbaxter@olympus.net (John W. Baxter)
- Date: Fri, 16 Dec 1994 20:44:22 -0800
- Organization: Internet for the Olympic Peninsula
-
- In article <3crbil$54s@status>, tonyc@iconz.co.nz (Tony Cooper) wrote:
-
- > How do you get the Macintosh Name or Owner Name? I have all the Inside Mac
- > bookks, all the snippets, and all the Develop Bookmark CDs. But I can't
- > find this one anywhere.
-
- 'STR ' resource ID -16096 is the user name
- 'STR ' resource ID -16413 is the machine name
-
- See page 1-127, IM More Mac Toolbox (I have the corner folded over).
-
- 'STR ' resource ID -8192 is the printer type (driver name) except when it
- isn't. One situation where it isn't is when QuickDraw GX printing is
- installed, when 'STR ' -8192 is the name of the current default desktop
- printer.
-
- > Mail to tonyc@iconz.co.nz.
- Done.
- --John
-
- --
- John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
- Caesar attended the Senate in a rented toga.
- jwbaxter@pt.olympus.net
-
- ---------------------------
-
- >From markm@XMission.com (Mark A. Matthews)
- Subject: How to receive events in AppleScript script?
- Date: Sun, 11 Dec 1994 12:05:46 -0700
- Organization: XMission Public Access Internet (801 539 0900)
-
-
- I'm trying to write a script which will receive events from Eudora when
- mail arrives. I can convince Eudora to send my script the events, but I
- can't figure out how to write the part of the script that is to receive
- the event from Eudora.
-
- A fragment of AppleScript demonstrating this would help greatly. Can
- anyone provide one?
-
- --
- -Mark
-
- +++++++++++++++++++++++++++
-
- >From paul@gig.nl (Paul Boots)
- Date: Mon, 12 Dec 1994 12:01:00 +0100
- Organization: ELECTROGIG Europe
-
- In article <markm-1112941205460001@slc34.xmission.com>, markm@XMission.com
- (Mark A. Matthews) wrote:
-
- > I'm trying to write a script which will receive events from Eudora when
- > mail arrives. I can convince Eudora to send my script the events, but I
- > can't figure out how to write the part of the script that is to receive
- > the event from Eudora.
- >
- > A fragment of AppleScript demonstrating this would help greatly. Can
- > anyone provide one?
- >
- > --
- > -Mark
-
-
- Hi Mark, below some code I tested with Eudora. It will receive the notice
- event sent by Eudora.
-
-
- Paul Boots
- paul@gig.nl
-
- - --
- CODE BEGINS
- - --
- on run
-
- --activate
- --start notifying when mail sent
- --tell application "Eudora1.5.1fc1-1.95" to start notifying
- set WhoIam to the (path to current application as alias)
- tell application "Eudora1.5.1fc1-1.95" to start notifying WhoIam when
- mail sent
-
- end run
-
- on notice messages theMsgList
- tell me to activate
- display dialog "Eudora notified me that it has send the following
- messages: " & ,
- return & theMsgList
- end notice
- - --
- END OF CODE
- - --
-
- ---------------------------
-
- >From pottier@triere.ens.fr (Francois Pottier)
- Subject: Jasik 12-08 Update available
- Date: 10 Dec 1994 13:11:00 GMT
- Organization: Ecole Normale Superieure, PARIS, France
-
-
- Steve Jasik asked me to post this message here. Note that I am in no
- way affiliated with Jasik Designs, I'm just a happy user of The Debugger...
-
- - ------------------------------------------------------------------------------
-
- 12/8 Jasik Debugger patch Notes - Dec 8, 1994
-
- To all Jasik Debugger users:
-
- The file '12_08_Dbgr_Patch' is an Application which patchs the
- 9/30/94 version of The Debugger.
-
- %%%%%JCurrent Fixes/changes - 12/8 %%%%%
-
- % auto load CFM LIbraries that we are notified about
- Open Doc users:
- Name your .sym files as Libname.xSym and they will get loaded Automatically
- when the OpenDoc part loads.
-
- FIX - Watchpoint to make more reliable, remove warning window
-
- fix - Step Into $AAFE (_MixedModeMagic) traps ( 68K -> PPC transitions ) now works
-
- fix - change Cursor handling to eliminate turds on PB 5xx Macs
-
- fix - when Interrupting a Mac running PowerPC code, xfer to it
-
- fix - stack crawl to handle both type of MixedMode switch frames
- fix - Discipline & Block Zapping - account for Modern Memory Mgr
- fix - Discipline & ioNamePtr - names can be in ROM
- fix -?stack - not processing 3rd arg properly
- fix - addresses were truncated to 24 bit values in unstructured asm windows
-
- %%%%%JCurrent Fixes/changes - 11/19 %%%%%
-
- fix - delete Bkpt's from memory image when deleting a task
-
- %%%%%JFixes/changes since 11/15 %%%%%
-
- fix - off by 1 in Target Lib command changes - incorrect data seg addr
-
- fix - add a 'ppat' resource to Dbgr so it doesn't clear DeskCPat
-
- fix - ignore DiskEvents so we don't lose them when we stop at INIT time.
-
- %%%%%JFixes/changes since 10/17/94 %%%%%
-
- fix - auto unload PPC targeted tasks properly
-
- fix - allow absolute address Breakpoints above 16 Meg
- display instructions & Bkpts properly in asm windows
-
- fix - not listing fields of array properly so they could be modified
-
- fix - allow Local Vars window to retain it's All or 1 frame mode
- when it becomes dynamic
-
- fix - allow modification of vars in other than the 1st frame.
- NOTE: You can't modify Reg Vars in other than Current proc.
-
- fix - blowup in _CloseResFile when trying to do SysBeep in 7.5 on IIfx, IIci
-
- fix - PACK 3 so we don't get an error trying to access the PowerTalk volumes
-
- fix - Garbage task in task tbl due to MF's heap moving when Modern Mem Mgr
- also cleanup code in Add_AuxTask which was incorrect
-
- % extend Target Lib to handle 68K Libs & libs with multiple exec segs
-
- fix - ignore SameProcess calls inside Dbgr as Wacom are asshole's
-
- fix - problems with Metrowerks .SYM files overflowing NTE limits, etc
-
- fix - Undo processing in text windows & memory leaks
- cmd-delete or Clear forces shrinking of the Text buffer
-
- fix - screwed type processing when 1st type was a dup type
-
- %%%%%JFixes/changes since 10/10/94 %%%%%J
-
- fix - remove code to play with GetResource patch as it assumed Dbgr's
- patch was 1st on the chain.
- Fixes problems with System 7.5 & Apple Menu Options
-
- fix - a bug in PPC WatchPoint that caused it to hang
-
- % add ?stack(fba,stk_top,is_PPC) command to dump an arbitrary stack
- if stk_top = 0 then stk_top := fba + 0C00,
- is_PPC = 1 for stack that starts with PPC stack frames.
- NOTE: This could be useful for Thread Mgr debugging.
-
- % Cmd_Key_Plus flag - If FrontWindow is Read_only then 'Cmd key' is added
- to any Key press except 'e' and period.
- You may turn this option OFF with the 'Cmd_Key_Plus' flag.
- NOTE
- a) remove the PLI_Buf flag from your ROM.dsi
- b) This option is more convenient than Function Keys for stepping
-
- fix - protect against OSDispatch calls inside The Debugger's environment
- by returning 'No such process' for GetFrontProcess, GetNextProcess, I
- Fixes problems with MS Word 6 and FileSharing, etc.
-
- %%%%%JFixes/changes since 9/30/94 %%%%%J
-
- fix - Metrowerks Global Vars above A5 now works.
-
- fix - Allowing periods in the middle of names broke 'Struct.field' in parser, etc
- Restrict name syntax to: 'xxx.nn' where n is a number
-
- fix - handle 4 byte enums in SYM files correctly
-
- Flag CFM Libraries in the Heap Display as: ' CFM Lib: pwpc'
- =-G - search for symName if addr is in a CFM Library or ROM (like Frown dcmd )
-
- Change default NTE Cutoff to $CE00
-
- fix - incorrect tabbing in writable windows, also set dialog box properly
-
- fix - stepping into a JSR d(A5) didn't alway work
-
- fix - MacApp Object displays - prefix window with task number (name too wide),
- make class tree work for specified subtree, fix Methods of for PPC tasks
-
- fix - speed up Cmd-D 'by name' search by NOT searching for a ROM name
- unless already in the ROM task
-
- %%%%%JTo update your version of The Debugger%%%%%%:
-
- A) Open up the folder 'Dbgr/Nosy files' and
- change the name of of the 9/30/94 version of 'The Debugger'
- to: '9/30/94 The Debugger'
-
- B) Dbl-click on the UpdateMaker file '12_08_Dbgr_Patch'
- to create a new version of 'The Debugger'
- (in the 'Dbgr/Nosy files' folder).
-
- % NOTE: If the patch program complains that FONT resources
- % don't match, then try Booting with Extensions OFF
- % (shift key down while booting) and try the Updater again.
-
-
- You may verify that you are running the newer version
- of The Debugger by checking the 4th line of the '-Notes-'
- window when you re-boot with The Debugger installed.
-
- It should read:
- USR_SG = nnnn The Debugger - V2.7.5-PPC 12/8/94
- -------
- Steve Jasik
- --
- Francois Pottier pottier@dmi.ens.fr
- - ----------------------------------------------------------------------------
- Check my WWW page at http://acacia.ens.fr:8080/home/pottier/index.html ...
-
- ---------------------------
-
- >From brianv@serv0.cae.wisc.edu (brianv)
- Subject: Mounting Appleshare Volumes
- Date: 7 Dec 1994 23:50:08 GMT
- Organization: Division of Information Technology
-
- Hello,
- I have been fighting with my mac trying to get it to mount an
- Appleshare volume located on an ethernet network using the command
- PBVolumeMount().
- However, I haven't had any luck. Can anyone send me some code where
- they have had success doing this?
-
- Thanks,
- Brian Vanderpool
- brianv@cae.wisc.edu
-
- +++++++++++++++++++++++++++
-
- >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
- Date: Sun, 11 Dec 1994 15:50:34 +0800
- Organization: Department of Computer Science, University of Western Australia
-
- In article <3c5hng$ghd@news.doit.wisc.edu>, brianv@serv0.cae.wisc.edu
- (brianv) wrote:
-
- >I have been fighting with my mac trying to get it to mount an
- >Appleshare volume located on an ethernet network using the command
- >PBVolumeMount().
-
- Did this just the other day...
-
- function MountAFPVolume(zone, server, vol, user, password : Str32;
- var mountedVRefNum : integer) : OSErr;
- var
- info: AFPVolMountInfo;
- cur_offset: integer;
-
- function CopyString (s: Str32): integer;
- begin
- CopyString := cur_offset + 23; (* 23 = header size - 1 (because
- the AFPData array is 1 based) *)
- BlockMove(@s, @info.AFPData[cur_offset], length(s) + 1);
- cur_offset := cur_offset + length(s) + 1;
- end; (* CopyString *)
-
- var
- pb: ParamBlockRec;
- err : OSErr;
- begin
- mountedVRefNum := 0;
- info.length := sizeof(info);
- info.media := AppleShareMediaType;
- info.flags := 0;
- info.nbpInterval := 0;
- info.nbpCount := 0;
- info.uamType := kTwoWayEncryptPassword;
- cur_offset := 1;
- info.zoneNameOffset := CopyString(zone);
- info.serverNameOffset := CopyString(server);
- info.volNameOffset := CopyString(vol);
- info.userNameOffset := CopyString(user);
- info.userPasswordOffset := CopyString(password);
- info.volPasswordOffset := CopyString('');
- with pb do begin (* safe *)
- pb.ioBuffer := @info;
- end; (* with *)
- err := PBVolumeMount(@pb);
- if err = noErr then begin
- mountedVRefNum := pb.ioVRefNum;
- end; (* if *)
- MountAFPVolume := err;
- end; (* MountAFPVolume *)
-
- Share and Enjoy.
- --
- Quinn "The Eskimo!" "Ah ha, the carnage begins!"
-
- +++++++++++++++++++++++++++
-
- >From jumplong@aol.com (Jump Long)
- Date: 12 Dec 1994 00:40:15 -0500
- Organization: America Online, Inc. (1-800-827-6364)
-
- In article <3c5hng$ghd@news.doit.wisc.edu>, brianv@serv0.cae.wisc.edu
- (brianv) writes:
-
- >I have been fighting with my mac trying to get it to mount an Appleshare
- >volume located on an ethernet network using the command PBVolumeMount().
- >However, I haven't had any luck. Can anyone send me some code where
- >they have had success doing this?
-
- Brian, Apple's sample code MoreFiles has a routine named
- BuildAFPVolMountInfo which will correctly built the mounting record for
- you. MoreFiles also has a high-level version of PBVolumeMount that you
- might find useful.
-
- If you need the user to enter their name and password, you can let the
- system take care of that for you by using NewAliasMinimalFromFullPath and
- then ResolveAlias.
-
- - Jim Luther
-
- ---------------------------
-
- >From scouten@uiuc.edu (Eric Scouten)
- Subject: PUZZLER: How to get to A5 world in _ExitToShell patch
- Date: Tue, 06 Dec 1994 16:55:05 -0600
- Organization: University of Illinois
-
- Howdy,
-
- I have an application that sets up lots of interrupt-level stuff
- (particularly sound channels). These, of course, have lots of asynchronous
- callback routines.
- To avoid the problem of leaving these things hanging when somebody (often
- myself, via the debugger or MacsBug) aborts the application via
- ExitToShell, I'm writing an ETS patch.
-
- All works fine when I do kill process from the MW Debugger, but *most* of
- the time when I hit the programmer's switch and do "es" from MacsBug, the
- A5 world is off the wall. (From what I can tell, I hit the NMI while the
- Toolbox was doing something for my app.) I need A5 to get to my list of
- things to close, but I can't figure any way to save a copy of A5 for
- myself. Static variables won't do, since they're all A5-indexed; the usual
- trick of extending the parameter block (for Time Manager tasks, etc., as
- documented in Develop) won't work since ETS has no parameter block.
-
- So I'm confused... anybody got bright ideas?
-
- -es
-
- __________________________________________________________________________
- Eric Scouten <scouten@uiuc.edu> * MS Comp Sci '96, Univ of Illinois
-
- Universities seem happiest when they are closest to anarchy.
- -Bill DiBrito
-
- +++++++++++++++++++++++++++
-
- >From Matt Slot <fprefect@engin.umich.edu>
- Date: 7 Dec 1994 00:38:17 GMT
- Organization: University of Michigan
-
- There is a lomem global called CurrentA5 which saves the valid A5 from the
- current context.
-
- That should do it.
-
- Matt
-
- +++++++++++++++++++++++++++
-
- >From scouten@uiuc.edu (Eric Scouten)
- Date: Tue, 06 Dec 1994 21:15:08 -0600
- Organization: University of Illinois
-
- In article <3c305p$2ju@controversy.math.lsa.umich.edu>, Matt Slot
- <fprefect@engin.umich.edu> wrote:
-
- > There is a lomem global called CurrentA5 which saves the valid A5 from the
- > current context.
-
- Duhhh... of course. Thanks for reminding me. :)
-
- Must have been the lack of sleep.
-
- -es
-
- __________________________________________________________________________
- Eric Scouten <scouten@uiuc.edu> * MS Comp Sci '96, Univ of Illinois
-
- We're putting out fires with gasoline.
- -David Bowie
-
- +++++++++++++++++++++++++++
-
- >From gurgle@dnai.com (Pete Gontier)
- Date: Tue, 06 Dec 1994 20:40:56 -0700
- Organization: cellular
-
- In article <scouten-0612941655050001@saguaro.cso.uiuc.edu>,
- scouten@uiuc.edu (Eric Scouten) wrote:
-
- > I have an application that sets up lots of interrupt-level stuff
- > (particularly sound channels)... To avoid the problem of leaving
- > these things hanging (upon an unexpected call to) ExitToShell,
- > I'm writing an ETS patch.
- >
- > All works fine when I do kill process from the MW Debugger, but *most* of
- > the time when I hit the programmer's switch and do "es" from MacsBug, the
- > A5 world is off the wall.
-
- The programmer's switch induces an NMI regardless of the code being
- executed. It may be the code from some other app, it may be trap code, it
- may be one of your completion routines -- anything. So yes, A5 can be
- wacky when you hit that NMI.
-
- However, this is not a problem having to do with A5, really. The real
- problem is the fact that you are inducing that NMI when code other than
- that of your app is running. Doing an 'es' under these circumstances is
- dangerous for a number of reasons, *not* the most important of which is
- that A5 is not set up correctly (because you can easily fix that in your
- patch by -- theoretically -- getting the "correct" value from the low
- memory global CurrentA5). It may also be the case that your app's heap is
- not the current heap, your app's copy of the low memory globals has not
- been swapped in, and a number of other things, some of which only Apple
- engineers are aware.
-
- So the problem is not your patch but the timing of your 'es' command.
-
- What I do to insure everything is set up correctly for me to do an 'es'
- against any app is to drag a window or pull down a menu, keeping the mouse
- button held down, invoke MacsBug (most often by holding down the command
- key with my free thumb and depressing the power key with my nose), type
- 'atba', command-G, and release the mouse. (Probably I had to release the
- mouse to type the MacsBug command, but you get the idea.) The click/hold
- sequence ensures that the front app is the current app. As soon as the app
- calls its next trap (probably the one right after DragWindow or
- MenuSelect), MacsBug steps in. Then I know it's probably a little more
- safe to do 'es'. If it's my app, then I know for sure it's safe, because
- I've patched ExitToShell like you are doing. :-)
-
- +++++++++++++++++++++++++++
-
- >From alexm@cts.com (Alex Maluta)
- Date: Wed, 7 Dec 1994 09:38:40 GMT
- Organization: /etc/organization
-
- Eric,
-
- > All works fine when I do kill process from the MW Debugger, but *most* of
- > the time when I hit the programmer's switch and do "es" from MacsBug, the
- > A5 world is off the wall. (From what I can tell, I hit the NMI while the
- > Toolbox was doing something for my app.) I need A5 to get to my list of
- > things to close, but I can't figure any way to save a copy of A5 for
- > myself. Static variables won't do, since they're all A5-indexed; the usual
- > trick of extending the parameter block (for Time Manager tasks, etc., as
- > documented in Develop) won't work since ETS has no parameter block.
- >
-
- I haven't tried this in exactly your case, but a quick look at TCL 1.1.3
- (which does patch ExitToShell) shows that they get at globals by simply
- calling SetCurrentA5(). It's too early in the morning for me to figure
- out if this is exactly what you're looking for, but hopefully it'll help.
-
- -Alex
-
- +++++++++++++++++++++++++++
-
- >From hawkfish@halcyon.com (Richard Wesley)
- Date: 7 Dec 1994 15:41:48 GMT
- Organization: Punch Deck Consulting
-
- In article <scouten-0612941655050001@saguaro.cso.uiuc.edu>
- scouten@uiuc.edu (Eric Scouten) writes:
-
- > All works fine when I do kill process from the MW Debugger, but *most* of
- > the time when I hit the programmer's switch and do "es" from MacsBug, the
- > A5 world is off the wall. (From what I can tell, I hit the NMI while the
- > Toolbox was doing something for my app.) I need A5 to get to my list of
- > things to close, but I can't figure any way to save a copy of A5 for
- > myself. Static variables won't do, since they're all A5-indexed; the usual
- > trick of extending the parameter block (for Time Manager tasks, etc., as
- > documented in Develop) won't work since ETS has no parameter block.
-
- Try using SetCurrentA5.
-
- rmgw
-
- +++++++++++++++++++++++++++
-
- >From Matt Slot <fprefect@engin.umich.edu>
- Date: 7 Dec 1994 20:49:06 GMT
- Organization: University of Michigan
-
- Pete Gontier, gurgle@dnai.com writes:
- > However, this is not a problem having to do with A5, really. The real
- > problem is the fact that you are inducing that NMI when code other than
- > that of your app is running. Doing an 'es' under these circumstances is
- > dangerous for a number of reasons, *not* the most important of which is
- > that A5 is not set up correctly (because you can easily fix that in your
- > patch by -- theoretically -- getting the "correct" value from the low
- > memory global CurrentA5). It may also be the case that your app's heap is
- > not the current heap, your app's copy of the low memory globals has not
- > been swapped in, and a number of other things, some of which only Apple
- > engineers are aware.
-
- If I use the debugger to 'es', it will kill the current app -- not the
- owner of the interrupt based routine you are in -- based on the switched in
- heap. You shouldn't have to worry about being exited when your app isn't
- in context. (I believe this, but have no confirmation).
-
- Doing an 'es' from anyone else's context should be safe enough to your
- interrupt routines if you have placed them in your heap or the system heap --
- but don't trust another app's heap, that would be bad. If you don't
- care for cleanliness and don't depend on globals from your app's heap,
- you can place your buffers/routines in the system heap. When you drop out,
- they will simply keep operating -- I know its not pretty, but fairly quick
- and safe.
-
- The only issue is to restore a valid globals context when you get the
- 'es' when your app is current, so that you can get the info about those
- routines you installed.
-
- Matt
-
- +++++++++++++++++++++++++++
-
- >From reinder@neuretp.biol.ruu.nl (Reinder Verlinde)
- Date: Thu, 8 Dec 1994 19:00:32 GMT
- Organization: Rijksuniversiteit Utrecht
-
- In article <gurgle-0612942040560001@mac.kat.gurgle>, gurgle@dnai.com (Pete
- Gontier) wrote:
-
- > ...
- >
- > What I do to insure everything is set up correctly for me to do an 'es'
- > against any app is to drag a window or pull down a menu, keeping the mouse
- > button held down, invoke MacsBug (most often by holding down the command
- > key with my free thumb and depressing the power key with my nose), type
- > 'atba', command-G, and release the mouse. (Probably I had to release the
- > mouse to type the MacsBug command, but you get the idea.) The click/hold
- > sequence ensures that the front app is the current app. As soon as the app
- > calls its next trap (probably the one right after DragWindow or
- > MenuSelect), MacsBug steps in. Then I know it's probably a little more
- > safe to do 'es'. If it's my app, then I know for sure it's safe, because
- > I've patched ExitToShell like you are doing. :-)
- >
- > ...
-
- The easier way to obtain the same result is to use a FKEY to enter MacsBug.
- To prevent nasty surprises when MacsBug is not installed (which should not
- happen often) one should use a FKEY like:
-
- #define MacJmp 0x120
-
- void main()
- {
- asm
- {
- move.l MacJmp,D0
- and.l #0x7FFFFFFF,D0
- beq.s @noDebuggerPresent
- dc.w _Debugger
- rts
-
- noDebuggerPresent:
- Move.w #0x09,-(sp)
- dc.w _SysBeep
- // rts automatically included at end by Think C
- }
- }
-
- or in hex (can be pasted into an empty FKEY resource in ResEdit):
-
- 2038012002807FFFFFFF6704A9FF4E753F3C0009A9C84E75
-
- I don't know whether it works with all debuggers, but it does work
- fine for me (I got the information on Debugger detection from an Apple
- Technote called 'PT 535 - MacsBug Q&As'. I'm not sure whether I
- followed the note completely; I remember detecting an inconsistency
- between its text and some Macs I examined)
-
- Reinder Verlinde
-
- +++++++++++++++++++++++++++
-
- >From gurgle@dnai.com (Pete Gontier)
- Date: Tue, 13 Dec 1994 15:24:44 -0700
- Organization: cellular
-
- In article <reinder-0812942000320001@neuretc.biol.ruu.nl>,
- reinder@neuretp.biol.ruu.nl (Reinder Verlinde) wrote:
-
- > The easier way to obtain the same result is to use a FKEY to enter MacsBug.
-
- Yes, but...
-
- (1) FKEYs don't work unless GNE is getting called periodicially.
- (2) I *like* hitting the power key with my nose. Who are you to
- tell me I shouldn't? :-)
-
- --
-
- Pete Gontier // MacZealotry, Ink. // gurgle@dnai.com
-
- Where do I want to go today? Anywhere but Chicago.
-
- +++++++++++++++++++++++++++
-
- >From dnebing@andy.bgsu.edu (bgsuvax)
- Date: 9 Dec 1994 23:39:27 GMT
- Organization: Bowling Green State University
-
- scouten@uiuc.edu (Eric Scouten) writes:
- > Howdy,
- >
- > I have an application that sets up lots of interrupt-level stuff
- > (particularly sound channels). These, of course, have lots of asynchronous
- > callback routines.
- > To avoid the problem of leaving these things hanging when somebody (often
- > myself, via the debugger or MacsBug) aborts the application via
- > ExitToShell, I'm writing an ETS patch.
-
- The following code works well for me...
-
- There are two functions to this. The first is InstallExitToShellPatch
- which takes a procedure pointer for the procedure that you want to
- to be called when the app is quitting. InstallExitToShellPatch patches
- ExitToShell to call the second function, CallExitToShells.
-
- How it works:
-
- InstallExitToShellPatch builds a list of procedure pointers. Every
- time that you call InstallExitToShellPatch, the procedure is added
- to the queue. When your app quits and the CallExitToShells procedure
- is called, it sets up the A5 world and then starts calling the procedures
- in the list (last in, first out).
-
- Three files are included. ExitToShell Patch.c and ExitToShell Patch.h,
- as well as a small file (named main.c) that demonstrates how to use
- the routines.
-
- Enjoy,
-
- Dave
-
- ============================================================
- Dave Nebinger dnebing@bgsuvax.bgsu.edu
- Network Manager, Biology Dept. dnebing@opie.bgsu.edu
- Bowling Green State University dnebing@bgsuopie (bitnet)
- Bowling Green, OH 43403 #include <std_disclaimer.h>
-
- Mighty 'Moof-in' PowerPC Ranger
-
- /*
- ExitToShell Patch.h
-
- Header file for ExitToShell Patch.c
-
- */
-
- #pragma once
-
- #ifndef __H_ExitToShell_Patch__
- #define __H_ExitToShell_Patch__
-
- #include <Memory.h>
- #include <SegLoad.h>
-
- typedef pascal void (*ExitToShellProcPtr)(void);
-
- enum {
- uppExitToShellProcInfo = kPascalStackBased
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr ExitToShellUPP;
-
- #define CallExitToShellProc(userRoutine) \
- CallUniversalProcPtr((UniversalProcPtr)(userRoutine),uppExitToShellProcInfo)
- #define NewExitToShellProc(userRoutine) \
- (ExitToShellUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppExitToShellProcInfo,\
- GetCurrentISA())
-
- #else
- typedef ExitToShellProcPtr ExitToShellUPP;
-
- #define CallExitToShellProc(userRoutine) \
- (*(userRoutine))()
- #define NewExitToShellProc(userRoutine) \
- (ExitToShellUPP)(userRoutine)
- #endif
-
- #define DisposeExitToShellProc(userRoutine)\
- DisposeRoutineDescriptor(userRoutine)
-
- #if defined(powerc)||defined(__powerc)
- #pragma options align=mac68k
- #endif
- struct ExitToShellUPPList{
- struct ExitToShellUPPList* nextProc;
- ExitToShellUPP userProc;
- };
- #if defined(powerc)||defined(__powerc)
- #pragma options align=reset
- #endif
-
- typedef struct ExitToShellUPPList ExitToShellUPPList,* ExitToShellUPPListPtr,** ExitToShellUPPHdl;
-
- #if defined(powerc)||defined(__powerc)
- #pragma options align=mac68k
- #endif
- struct ExitToShellDataStruct{
- unsigned long a5;
- short numUserProcs;
- ExitToShellUPPList* userProcs;
- ExitToShellUPP oldProc;
- };
- #if defined(powerc)||defined(__powerc)
- #pragma options align=reset
- #endif
-
- typedef struct ExitToShellDataStruct ExitToShellDataRec,* ExitToShellDataPtr,** ExitToShellDataHdl;
-
- extern ExitToShellDataPtr gExitToShellData;
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- OSErr InstallExitToShellPatch(ExitToShellProcPtr newProc);
- static pascal void CallExitToShells(void);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
-
-
-
- /**************** End Of File! ***************/
-
-
- /*
- ExitToShell Patch.c
-
- Patches ExitToShell to call a user routine. With the advent of UPPs and MixedMode, it gets
- harder to patch things correctly. Anyway, InstallExitToShellPatch takes an 'old' ProcPtr and
- creates the necessary UPP which NSetTrapAddress now requires. Hopefully everything is
- done correctly... ;-) CallExitToShells, the intermediary procedure, ensures that A5 is set
- up correctly for the application before calling the custom ExitToShell routine.
-
- 8/14/94 dn - Created.
-
- 11/31/94 dn - Major modifications!
- Modified to allow multiple ExitToShell patches. Basically, this just builds a list of procedures to
- call before exiting the program.
- */
-
- #include "ExitToShell Patch.h"
-
- static ExitToShellDataPtr gExitToShellData=(ExitToShellDataPtr)0L;
-
- /*
- InstallExitToShellPatch
-
- Installs the ExitToShell patch (obviously ;-). In the data structure for gExitToShellData is stored the
- current value of the A5 register, the UPP for the routine that should be called first, then the UPP for
- the routine that was originally there. ExitToShell is then patched to call the 'CallExitToShells' which
- handles all of the garbage for setting up the A5 register, etc., before calling the two routines.
-
- (patching ExitToShell info/example comes from TCL 1.1.3 CApplication.c, ) Symantec, Inc.)
- */
- OSErr InstallExitToShellPatch(ExitToShellProcPtr newProc){
- short etsTrap;
- ExitToShellUPP oldETS,newETS,callETS;
- ExitToShellUPPListPtr lp;
- long oldETSTrap,newETSTrap;
- OSErr err;
-
- if (gExitToShellData==(ExitToShellDataPtr)0L){
- // the patches have not been initialized, set it up first...
-
- // allocate the memory to hold the information...
- gExitToShellData=(ExitToShellDataPtr)NewPtr(sizeof(ExitToShellDataRec));
-
- // save the value of register a5
- gExitToShellData->a5=SetCurrentA5();
-
- // init the number of user procs.
- gExitToShellData->numUserProcs=0;
- gExitToShellData->userProcs=(ExitToShellUPPList*)0L;
-
- // now set up the UPP for the original ExitToShell
- etsTrap=_ExitToShell & 0x3ff; // set up trap value...
- callETS=NewExitToShellProc(CallExitToShells); // get the UPP for intermediary proc
- oldETS=(ExitToShellUPP)NGetTrapAddress(etsTrap,ToolTrap); // get the old trap UPP...
- NSetTrapAddress((UniversalProcPtr)callETS,etsTrap,ToolTrap); // set to the intermediary proc
- gExitToShellData->oldProc=oldETS; // save the old ETS UPP
-
- }
-
- // get the upp for the new replacement proc
- newETS=NewExitToShellProc(newProc);
-
- // allocate a new node...
- lp=(ExitToShellUPPListPtr)NewPtrClear(sizeof(ExitToShellUPPList));
- lp->userProc=newETS;
-
- // put it into the chain...
- lp->nextProc=gExitToShellData->userProcs;
- gExitToShellData->userProcs=lp;
- gExitToShellData->numUserProcs++;
-
- return noErr;
- }
-
- /*
- CallExitToShells
-
- First this routine calls the user's ExitToShell routines, then it calls the original
- ExitToShell trap routine. That's why it is referred to as the intermediary procedure
- in InstallETSPatch.
- */
- static pascal void CallExitToShells(){
- OSErr err,err2;
- long oldA5=SetCurrentA5(); // get the current value for register A5 and set it to the application's A5
- ExitToShellUPP oldETS;
- ExitToShellUPPListPtr nextProc,curProc;
-
- SetA5(gExitToShellData->a5);
-
- if (gExitToShellData->numUserProcs>0){
- // call the user's routines
-
- // get the first routine
- curProc=gExitToShellData->userProcs;
-
- // loop though the procedures...
- do {
- // set up for the next routine
- nextProc=curProc->nextProc;
-
- // call the procedure
- CallExitToShellProc(curProc->userProc);
-
- // dispose of the UPP
- DisposeExitToShellProc(curProc->userProc);
-
- // dispose of the list entry
- DisposePtr((Ptr)curProc);
-
- curProc=nextProc;
- } while (curProc!=(ExitToShellUPPListPtr)0L);
- // done!
- }
-
- // prepare to call the original ExitToShell
- oldETS=gExitToShellData->oldProc;
-
- // dispose of the memory gExitToShellData holds
- DisposePtr((Ptr)gExitToShellData);
-
- // restore the old a5
- SetA5(oldA5);
-
- // now call the original ExitToShell
- CallExitToShellProc(oldETS);
-
- return;
- }
-
-
-
- /*********** End Of File! **************/
-
-
- /*
- main.c
-
- */
-
- #include "ExitToShell Patch.h"
-
- pascal void proc1(void);
- pascal void proc2(void);
- pascal void proc3(void);
-
- main(){
-
- InitMac();// self explanatory
-
- InstallExitToShellPatch(proc1);
-
- InstallExitToShellPatch(proc2);
-
- InstallExitToShellPatch(proc3);
-
- }
-
- pascal void proc1(){
- long time;
-
- SysBeep();
- Delay(120,&time); // needed to get the beeps to happen
- }
-
- pascal void proc2(){
- long time;
-
- SysBeep();
- SysBeep();
- Delay(120,&time); // needed to get the beeps to happen
- }
-
- pascal void proc3(){
- long time;
-
- SysBeep();
- SysBeep();
- SysBeep();
- Delay(120,&time); // needed to get the beeps to happen
- }
-
-
- +++++++++++++++++++++++++++
-
- >From phils@bedford.symantec.com (Phil Shapiro)
- Date: Fri, 16 Dec 1994 10:07:02 -0500
- Organization: Symantec Corp.
-
- In article <3caprf$bf@falcon.bgsu.edu>, dnebing@andy.bgsu.edu (bgsuvax) wrote:
-
- | scouten@uiuc.edu (Eric Scouten) writes:
- | > I have an application that sets up lots of interrupt-level stuff
- | > (particularly sound channels). These, of course, have lots of asynchronous
- | > callback routines.
- | > To avoid the problem of leaving these things hanging when somebody (often
- | > myself, via the debugger or MacsBug) aborts the application via
- | > ExitToShell, I'm writing an ETS patch.
- |
- | The following code works well for me...
- |
- | There are two functions to this. The first is InstallExitToShellPatch
- | which takes a procedure pointer for the procedure that you want to
- | to be called when the app is quitting. InstallExitToShellPatch patches
- | ExitToShell to call the second function, CallExitToShells.
- |
- | How it works:
- |
- | InstallExitToShellPatch builds a list of procedure pointers. Every
- | time that you call InstallExitToShellPatch, the procedure is added
- | to the queue. When your app quits and the CallExitToShells procedure
- | is called, it sets up the A5 world and then starts calling the procedures
- | in the list (last in, first out).
- |
- | Three files are included. ExitToShell Patch.c and ExitToShell Patch.h,
- | as well as a small file (named main.c) that demonstrates how to use
- | the routines.
-
- Anyone who has THINK C or Symantec C++ already has this -- it's called
- "atexit()". If you register a function with atexit(), it's called at
- ExitToShell time with the correct A5, automatically.
-
- It doesn't support PowerPC patching of ETS, though. I believe that the CDK
- comes with a PowerPC version of atexit() that uses __term instead of
- patching ETS.
-
- -phil
-
- +++++++++++++++++++++++++++
-
- >From dnebing@andy.bgsu.edu (bgsuvax)
- Date: 16 Dec 1994 19:49:08 GMT
- Organization: Bowling Green State University
-
- phils@bedford.symantec.com (Phil Shapiro) writes:
- >
- > Anyone who has THINK C or Symantec C++ already has this -- it's called
- > "atexit()". If you register a function with atexit(), it's called at
- > ExitToShell time with the correct A5, automatically.
-
- Yes, but:
-
- 1. you need TC or SymC++ (I do)
- 2. you need the ANSI baggage
-
- It was mostly for #2 that I put the code together. I have the
- UPP code worked out for PPC patching, but like you said I am not
- sure that it is the best method for PPC code...
-
- Dave
-
- ============================================================
- Dave Nebinger dnebing@bgsuvax.bgsu.edu
- Network Manager, Biology Dept. dnebing@opie.bgsu.edu
- Bowling Green State University dnebing@bgsuopie (bitnet)
- Bowling Green, OH 43403 #include <std_disclaimer.h>
-
- Mighty 'Moof-in' PowerPC Ranger
-
-
- ---------------------------
-
- >From howardk@cyberstore.ca (Howard Katz)
- Subject: Password for mounting remote volumes
- Date: Mon, 28 Nov 1994 12:11:47 -0800
- Organization: Enigmatic Software
-
- Can someone tell me what a volume password is? Let me provide a little
- context for the question.
-
- We need to periodically automount remote servers on our network to ship
- files over to them for archiving purposes. We need to do this transparently
- without user intervention, so I'd like to use PBVolumeMount() to remount a
- server, passing in saved mounting information from a prior session. This
- seems fairly straightforward.
-
- IM mentions a caveat, however, that System 7 filesharing software (which we
- use) will not pass the volume password along with the PBVolumeMount() call.
- My question is:
-
- (1) What _is_ a volume password? All I currently know about and have access
- to is the user password, and
-
- (2) Does this mean I can't do what I want to do?
-
- Any help would be much appreciated.
-
- Thanks in advance,
-
- Howard Katz
- - --
- Time flies like an arrow.
- Fruit flies like a banana.
-
- +++++++++++++++++++++++++++
-
- >From jumplong@aol.com (Jump Long)
- Date: 12 Dec 1994 01:15:34 -0500
- Organization: America Online, Inc. (1-800-827-6364)
-
- In article <howardk-281194121147@howard-katz.bcaa.bc.ca>,
- howardk@cyberstore.ca (Howard Katz) writes:
-
- >IM mentions a caveat, however, that System 7 filesharing software (which
- >we use) will not pass the volume password along with the PBVolumeMount()
- >call. My question is:
- >
- >(1) What _is_ a volume password? All I currently know about and have
- >access to is the user password, and
-
- Volume passwords are an optional feature of the AppleTalk Filing Protocol.
- It's so optional, that the AppleShare and File Sharing file servers don't
- support it. There may be non-Apple AFP servers that support volume
- passwords, but I don't know which ones. It's kind of a stupid feature
- since the password is sent to the server "clear text" (no encryption).
-
- The note in IM: Files about volume passwords and PBVolumeMount only
- pertains to older versions of the AppleShare client (the AppleShare
- Chooser extension). The problem was fixed in the AppleShare 3.0 client
- and all laters versions of the AppleShare client (i.e., the clients that
- shipped with System 7.1 and later, and with AppleShare Pro and 4.0.x).
-
- >(2) Does this mean I can't do what I want to do?
-
- Nope, not at all. Since you'll rarely even find a network volume with a
- volume password, you probably don't even have to worry about it. System 7
- has little support for volume passwords - in fact, the Alias Manager
- doesn't support them.
-
- - Jim Luther
-
- ---------------------------
-
- >From jimsa@microsoft.com (Jim Sather)
- Subject: SUMMARY: MacTCP Performance Problems
- Date: Wed, 14 Dec 1994 20:42:07 GMT
- Organization: Microsoft Corporation
-
-
- About a week ago I asked for help/suggestions on how to speed up a TCP/IP
- transport. Here's a quick run down on the suggestions received. It turns
- out that the push flag was my problem.
-
- -Jim
-
- Robert Mah <rmah@panix.com> wrote:
- - -------------------------------------------------------
- MacTCP is fairly sensitive to buffer space. Try allocating a LOT more
- space for the receive buffer when you create the stream. Another thing
- you might want to try is to use the TCPNoCopyRcv receive calls instead
- of the TCPRcv call.
-
- Also, make sure you are setting the "push" flag for TCPSend at the
- appropriate times. I think if you set it too often, you get lot's of
- "smaller" packets instead of a few "larger" ones. When to do this is
- very application specific in nature.
-
- Finally, you *are* calling MacTCP asynchronouslly aren't you? And you
- *are* using asych file mgr calls too, right?
-
- Eric Scouten <scouten@uiuc.edu> wrote:
- - ----------------------------------------------------------
- You have to do a lot of funny business with MacTCP to get good performance
- from it. Try playing with such parameters as the buffer size, number of
- entries in the RDS/WDS. Also, you can issue multiple read/write commands;
- doing so may help performance.
-
- In my experience, MacTCP maxes out at about 410KB/second on an otherwise
- quiet Ethernet. This is in line with Apple's advertising copy for MacTCP,
- and suggests that there is some inherent slowness in MacTCP.
-
-
- ttuck <ttuck@jolt.mpx.com.au> wrote:
- - ----------------------------------------------------
- You might be suffering from the "infinite slowdown problem" that
- plagues MacTcp up to version 2.0.4.
-
- I have noticed an increase in speed of my favourite netapps since the
- upgrade.
-
- You can FTP a patcher from seeding.apple.com. You apply the patch to a
- "virgin" copy of 2.0.4.
-
- It fixes a whole swag of bugs including a nasty one with DNS that could
- hose it if the DNS had a lot to say ! :-)
-
-
- ---------------------------
-
- >From tjb@acpub.duke.edu (Tom Bryce)
- Subject: [Q] How to find parameter info for traps
- Date: 11 Dec 1994 18:25:48 GMT
- Organization: Duke Med
-
-
- I have a copy the Develop CD #17 with the old Inside Macs I-VI on it,
- as well as files, toolbox, toolbox essentials, and so on from the new
- Inside Macs.
-
- Can anyone tell me where I should look to find information on parameter
- info for traps? For example, if I were to patch _MountVol, in which
- registers would the parameters for _MountVol be passed, and how should
- I return a return value? Push an OSErr onto the stack??
-
- Thanks for any help.
-
- - ----------------------------------------------------------------------
-
- Tom Bryce
- for PGP public key finger tjbryce@amherst.edu
-
- +++++++++++++++++++++++++++
-
- >From scouten@metrowerks.com (Eric Scouten)
- Date: Sun, 11 Dec 1994 12:46:03 -0600
- Organization: metrowerks, inc.
-
- In article <3cfg7c$mdl@news.duke.edu>, tjb@acpub.duke.edu (Tom Bryce) wrote:
-
- > Can anyone tell me where I should look to find information on parameter
- > info for traps? For example, if I were to patch _MountVol, in which
- > registers would the parameters for _MountVol be passed, and how should
- > I return a return value? Push an OSErr onto the stack??
-
- My advice is to dissect the relevant header files. For example, in
- <Files.h>, there is the following declaration, which gives 68K register
- declarations:
-
- #if !GENERATINGCFM
- #pragma parameter __D0 PBMountVol(__A0)
- #endif
- extern pascal OSErr PBMountVol(ParmBlkPtr paramBlock)
- ONEWORDINLINE(0xA00F);
-
-
- (NOTE: This is from the new Universal Headers 2.0, but the old headers
- should look somewhat similar.)
-
- In general, the IM volumes concentrate more on providing info to those who
- are *using* the traps, rather than those who are patching them. When you
- get into patching, you may have to do some sleuthing to get the info and
- then experiment to ensure that you're getting the right parameters in the
- right places.
-
- -es
-
- __________________________________________________________________________
- Eric Scouten <scouten@metrowerks.com>
-
- +++++++++++++++++++++++++++
-
- >From tjb@acpub.duke.edu (Tom Bryce)
- Date: 11 Dec 1994 20:31:25 GMT
- Organization: Duke Med
-
- In article <scouten-1112941246030001@mingus.isdn.uiuc.edu>
- scouten@metrowerks.com (Eric Scouten) writes:
-
- > In article <3cfg7c$mdl@news.duke.edu>, tjb@acpub.duke.edu (Tom Bryce) wrote:
- >
- > > Can anyone tell me where I should look to find information on parameter
- > > info for traps? For example, if I were to patch _MountVol, in which
- > > registers would the parameters for _MountVol be passed, and how should
- > > I return a return value? Push an OSErr onto the stack??
- >
- > My advice is to dissect the relevant header files. For example, in
- > <Files.h>, there is the following declaration, which gives 68K register
- > declarations:
- >
- > #if !GENERATINGCFM
- > #pragma parameter __D0 PBMountVol(__A0)
- > #endif
- > extern pascal OSErr PBMountVol(ParmBlkPtr paramBlock)
- > ONEWORDINLINE(0xA00F);
- >
- >
-
- Can I follow up with a question about how to interpret the following
- header, just grabbed at random from Files.h
-
- pascal OSErr PBClose(ParmBlkPtr paramBlock,Boolean async);
- #pragma parameter __D0 PBCloseSync(__A0)
- pascal OSErr PBCloseSync(ParmBlkPtr paramBlock)
- = 0xA001;
- #pragma parameter __D0 PBCloseAsync(__A0)
- pascal OSErr PBCloseAsync(ParmBlkPtr paramBlock)
- = 0xA401;
-
- The first declaration (PBClose) seems to be for a close command. The
- boolean seems to refer to whether it is being called asyncronously or
- not, or in flow terms, whether the PBCloseSync or PBCloseAsync was
- being called.
-
- Suppose I were patching the PBClose command, for example, just to give
- a sysbeep whenever a file is closed. Files.h did not give an address
- for a trap for PBClose, the above is all it had. Should I then patch
- two traps, one for PBCloseSync, and another for PBCloseAsync? And where
- is the decision being made to call one or the other? Is there a trap
- PBClose that is first called which then interprets the Boolean async
- and calls one of the other two?
-
- Am I correct in assuming A0 points to the parameters for these two
- routines, and D0 should hold the result code they return when they are
- finished?
-
- Also, if PBClose has its own trap, what does the parameter block look
- like? There are *two* arguments to PBClose here. So, for example, does
- A0 point to a chunk of memory in which first a ParmBlkPtr is located,
- then sequentially thereafter one byte of Boolean? So *((unsigned char
- *)A0+sizeof(ParmBlkPtr)) would point to the Boolean parameter?
-
- If it sounds like I'm a total neophyte, I am. :-) I have the FAQ on
- init writing and some sample code, but nowhere have I seen explained
- how to handle these parameter issues.
-
- Thanks
-
- Tom
-
- - ----------------------------------------------------------------------
-
- Tom Bryce
- for PGP public key finger tjbryce@amherst.edu
-
- +++++++++++++++++++++++++++
-
- >From scouten@metrowerks.com (Eric Scouten)
- Date: Sun, 11 Dec 1994 15:15:30 -0600
- Organization: metrowerks, inc.
-
- In article <3cfnit$qum@news.duke.edu>, tjb@acpub.duke.edu (Tom Bryce) wrote:
-
- [Initial question & my response deleted]
-
- > Can I follow up with a question about how to interpret the following
- > header, just grabbed at random from Files.h
- >
- > pascal OSErr PBClose(ParmBlkPtr paramBlock,Boolean async);
- > #pragma parameter __D0 PBCloseSync(__A0)
- > pascal OSErr PBCloseSync(ParmBlkPtr paramBlock)
- > = 0xA001;
- > #pragma parameter __D0 PBCloseAsync(__A0)
- > pascal OSErr PBCloseAsync(ParmBlkPtr paramBlock)
- > = 0xA401;
- >
- > The first declaration (PBClose) seems to be for a close command. The
- > boolean seems to refer to whether it is being called asyncronously or
- > not, or in flow terms, whether the PBCloseSync or PBCloseAsync was
- > being called.
-
- Ahhh... now you're hitting on some of the complexity of Macintosh system
- calls. As you suspectd, PBClose is actually a piece of glue code in the
- compiler's library that dispatches the call to the PBCloseSync or
- PBCloseAsync trap based on the value of the boolean parameter.
-
- BUT.. the fun's not over yet: The A001 and A401 actually get dispatched to
- the *SAME* address (the _Close, 0x001 in OS trap dispatch table). The
- routine that implements these traps (actually part of the Device Manager,
- although the File Manager shares the traps) then looks at the trap word to
- determine how it should respond to the call.
-
- Fun, huh?
-
- So for your application, you should patch the _Close trap. Both sync &
- async calls will be routed to your patch. HOWEVER, you should know that
- you'll *also* be getting requests to close *devices*, so you'll have to
- some work to decode the param block before declaring that a close file was
- executed.
-
-
- > Suppose I were patching the PBClose command, for example, just to give
- > a sysbeep whenever a file is closed.
-
- DANGER WILL ROBINSON... SysBeep cannot be called from interrupt-level
- code. The asynchronous flavor of _Close (and all the other file/device
- calls) *can* be called from interrupt code (even if your app doesn't do
- it, some other system process is likely to). So you'll have to figure some
- other debugging method.
-
-
- > Files.h did not give an address
- > for a trap for PBClose, the above is all it had.
-
- As I said, PBClose is merely a bit of glue code. In the new Universal
- Headers (shipping on CW/5), it's been replaced by a macro, so the compiler
- can optomize away the extra call if a constant is given for the async
- parameter. It looks like this:
-
- #define PBClose(pb, async) ((async) ? PBCloseAsync(pb) : PBCloseSync(pb))
-
-
- > Am I correct in assuming A0 points to the parameters for these two
- > routines, and D0 should hold the result code they return when they are
- > finished?
-
- Yes. This is generally true for all of the "low-level" file/device manager
- calls. (These are the calls that have PB at the start of their names.)
-
- -es
-
- __________________________________________________________________________
- Eric Scouten <scouten@metrowerks.com>
-
- +++++++++++++++++++++++++++
-
- >From jwbaxter@olympus.net (John W. Baxter)
- Date: Sun, 11 Dec 1994 16:33:22 -0800
- Organization: Internet for the Olympic Peninsula
-
- In article <scouten-1112941515300001@mingus.isdn.uiuc.edu>,
- scouten@metrowerks.com (Eric Scouten) wrote:
-
- Eric Scouten sez:
- >
- > As I said, PBClose is merely a bit of glue code. In the new Universal
- > Headers (shipping on CW/5), it's been replaced by a macro, so the compiler
- > can optomize away the extra call if a constant is given for the async
- > parameter. It looks like this:
- >
- > #define PBClose(pb, async) ((async) ? PBCloseAsync(pb) : PBCloseSync(pb))
- >
- That's also the headers I have in my MPW installation (from E.T.O. 15).
-
- For PPC, there really are two calls into the shared library: PBCloseAsync
- and PBCloseSync...the macro is a clever way to separate them out at
- compile time, and doesn't get in the way of setting up the bit in the trap
- for 68K.
-
- --John
-
- --
- John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
- Caesar attended the Senate in a rented toga.
- jwbaxter@pt.olympus.net
-
- ---------------------------
-
- >From han@ifa.hawaii.edu (Byron Han)
- Subject: string constants in Metrowerks C code resource?
- Date: Thu, 8 Dec 1994 07:40:57 GMT
- Organization: Institute for Astronomy, University of Hawaii
-
- How does one get string constants to work in 68K code resources in
- Metrowerks? I used to be able to do this just fine in MPW but now I am
- stuck. The PPC side of the code resource works just fine with the
- embedded string constants but the 68K side is broken...
-
- Thanks in advance.
-
- BH
-
- --
- Byron Han * Institute for Astronomy * University of Hawaii at Manoa
- 2680 Woodlawn Drive * Honolulu HI 96822 * han@ifa.hawaii.edu
- WWW: http://galileo.ifa.hawaii.edu/~sped/byronhan.html
- eWorld: BYRONHAN * AOL: BYRON Han
-
- +++++++++++++++++++++++++++
-
- >From jwbaxter@olympus.net (John W. Baxter)
- Date: Fri, 09 Dec 1994 08:18:40 -0800
- Organization: Internet for the Olympic Peninsula
-
- In article <han-0712942140570001@128.171.75.8>, han@ifa.hawaii.edu (Byron
- Han) wrote:
-
- > How does one get string constants to work in 68K code resources in
- > Metrowerks? I used to be able to do this just fine in MPW but now I am
- > stuck. The PPC side of the code resource works just fine with the
- > embedded string constants but the 68K side is broken...
-
- See the sample CODE resources folder. Metrowerks follows THINK's idea of
- using register A4 to point to the globals (but the details are
- different). String constants are just globals to THINK and
- CodeWarrior...not handled with the special embed in the code and reference
- via the PC as MPW can be told to do. [Frankly, I prefer MPW's way.]
-
- --John
-
- --
- John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
- Caesar attended the Senate in a rented toga.
- jwbaxter@pt.olympus.net
-
- +++++++++++++++++++++++++++
-
- >From ericstad@netcom.com (Eric Stadtherr)
- Date: Mon, 12 Dec 1994 03:24:25 GMT
- Organization: NETCOM On-line Communication Services (408 261-4700 guest)
-
- han@ifa.hawaii.edu (Byron Han) writes:
-
- >How does one get string constants to work in 68K code resources in
- >Metrowerks? I used to be able to do this just fine in MPW but now I am
- >stuck. The PPC side of the code resource works just fine with the
- >embedded string constants but the 68K side is broken...
-
- >Thanks in advance.
-
- >BH
-
- Are you trying something like:
-
- void CodeResourceMain (void)
- {
- StringPtr theString = "\pThis is a string";
- ...
- oldA4 = SetUpA4();
- ...
- RestoreA4 (oldA4);
- }
-
- If so, you'll need to move the assignment of the StringPtr inside the
- SetUpA4() call. This is because the string globals are referenced from
- A4 under MetroWerks. This worked under THINK C, I believe, since THINK
- code resources always started with A0 pointing to the start of the
- resource.
-
- -Eric Stadtherr
- Ootinta Software
-
- ---------------------------
-
- End of C.S.M.P. Digest
- **********************
-